package agentes09.negotiation.behaviours;

import agentes09.agentes.AgenteConEstado;
import jade.core.AID;
import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.ACLMessage;
import java.util.Vector;

public class NegociacionGasolinera extends CyclicBehaviour{

    private Vector vector = new Vector(); //vector utilizado para guardar los
                                          //AIDs de cada camion que ha aceptado negociar
    private double totalCombustible=500000;  //cantidad de combustible en litros que tiene la gasolinera
    private int ofertasRecibidas = 0;     //contador para saber cuantas ofertas llevo
    private ACLMessage respuesta = null;  //utilizado para generar una respuesta
    private ACLMessage mensaje = null;    //utilizado para guardar el mensaje recibido
    private double totalDinero = 0; // caja de la gasolinera
    
    private double litros = 0; // litros que pide un camion

    @Override
    public void action() {
        mensaje = myAgent.receive();
/*        
        if (mensaje != null)
        {             
                      	       	
        	if (mensaje.getPerformative() == ACLMessage.ACCEPT_PROPOSAL)
             {
                 vector.add(mensaje.getSender());      //guardo el AID
                 double litros = Double.parseDouble(mensaje.getUserDefinedParameter("litros"));
                 totalCombustible = totalCombustible-litros;
                 respuesta = mensaje.createReply();
                 respuesta.setPerformative(ACLMessage.AGREE);
                 respuesta.setContent("vendido la cantidad de " + litros + " al camion " + mensaje.getSender());
                 myAgent.send(respuesta);
                 System.out.println(respuesta.getContent());
                 ofertasRecibidas++;
             }
             else if (mensaje.getPerformative() == ACLMessage.REJECT_PROPOSAL)
             {
                 //propuesta de compra rechazada por el agente camion 
                System.out.println("AGENTE "+mensaje.getSender().getLocalName()  +"  rechazo la oferta");
             }             

        	
        }//if (mensaje != null)
        else block();    
*/
        if (mensaje != null)
        {             
                      	       	
        	if (mensaje.getPerformative() == ACLMessage.PROPOSE)
             {
                 vector.add(mensaje.getSender());      //guardo el AID
//               double litros = Double.parseDouble(mensaje.getUserDefinedParameter("litros"));
                 litros = Double.parseDouble(mensaje.getUserDefinedParameter("litros"));
//                 totalCombustible = totalCombustible-litros;
                 respuesta = mensaje.createReply();
                 respuesta.setPerformative(ACLMessage.ACCEPT_PROPOSAL);
                 respuesta.setContent("Propuesta de venta de la cantidad de " + litros + " litros al camion " + mensaje.getSender());
                 myAgent.send(respuesta);
                 System.out.println(respuesta.getContent());
                 ofertasRecibidas++;
             }
             else if (mensaje.getPerformative() == ACLMessage.CANCEL)
             {
                 //propuesta de compra rechazada por el agente camion 
                System.out.println("AGENTE "+mensaje.getSender().getLocalName()  +"  rechazo la propuesta de "  + myAgent.getName());
             }             
             else if (mensaje.getPerformative() == ACLMessage.AGREE)
             {
                 //propuesta de compra aceptada por el agente camion 
            	totalCombustible = totalCombustible-litros;
				//Se actualiza el combustible de la gasolinera
				((AgenteConEstado)myAgent).getEstado().setMercanciaDisponible(totalCombustible);
                System.out.println("AGENTE "+mensaje.getSender().getLocalName()  +"  acepto la propuesta de "  + myAgent.getName());
                System.out.println("A la gasolinera le quedan " + totalCombustible + " litros");
             }             

        	
        }//if (mensaje != null)
        else block();    
        
    }//fin metodo action

}

